home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power Programmierung 2
/
Power-Programmierung CD 2 (Tewi)(1994).iso
/
gnu
/
gnulib
/
sipp
/
doc
/
sipp.3
< prev
next >
Encoding:
Amiga
Atari
Commodore
DOS
FM Towns/JPY
Macintosh
Macintosh JP
Macintosh to JP
NeXTSTEP
RISC OS/Acorn
Shift JIS
UTF-8
Wrap
GNU Info File
|
1994-02-16
|
42.6 KB
|
1,170 lines
This is Info file sipp, produced by Makeinfo-1.55 from the input file
sipp.tex.
Copyright (C) 1992 Jonas Yngvesson, Inge Wallin
File: sipp, Node: The bumpy shader, Next: The planet shader, Prev: The mask shader, Up: Provided shaders
The bumpy shader
----------------
`bumpy_shader()' is a not really a shader. It is a function that
changes the surface normal to create the impression of a bumpy surface.
The bumps are dependent on the three dimensional texture coordinates.
Any other shader can be used to do the final shading calculations.
Surface description:
typedef struct {
Shader *shader;
void *surface;
double scale;
bool bumpflag;
bool holeflag;
} Bumby_desc;
* `shader' points to the shader that should be called to do the
actual shading calculations.
* `surface' is a pointer to the surface description that should be
used in `shader'.
* `scale' describes how much the texture coordinates should be scaled
before applying the texture.
* `bumpflag' and `holeflag' make it possible to flatten out half of
the bumps. If only bumpflag is TRUE only bumps "standing out" from
the surface are visible. The rest of the surface will be smooth.
If, on the other hand, only holeflag is TRUE only bumps going
"into" the surface will be visible, thus giving the surface an
eroded look. If both flags are true, the whole surface will get a
bumpy appearance, rather like an orange.
File: sipp, Node: The planet shader, Prev: The bumpy shader, Up: Provided shaders
The planet shader
-----------------
`planet_shader()' is a somewhat specialized shader that produces a
texture that resembles a planet surface. The planet is of the Tellus
type with a mixture of oceans and continents. Some of the surface is
covered by semi-transparent clouds which enhances the effect greatly.
On the other hand, no polar caps are provided and this decreases the
realism.
The texture is 3-dimensional, so it is possible to create cube
planets or even planets with cut-out parts that still have surfaces that
resemble the earth surface. The texture is not scalable, and is
designed to be used with texture coordinates in the range [-1, 1], e.g.
a unit sphere. The world coordinates need not have the same order of
magnitude of course .
Surface description: The planet shader uses the same surface
description as `basic_shader()', a `Surf_desc' (see *Note The basic
shader::), but the colors on the surface are hard coded in the shader,
so the color entry in the description is ignored.
File: sipp, Node: Writing your own shaders, Prev: Provided shaders, Up: Shaders
Writing your own shaders
========================
As mentioned earlier, SIPP calls a shading function for every point
that is rendered. To be able to perform all necessary calculations, the
shader needs quite a lot of information of the state the rendering is
in. All information are sent to the shader as pointers to the data used
internally in SIPP. It is very important that this information is left
unchanged. If any processing of the values is needed, e.g. normalization
of the surface normal, the result must be stored in local variables in
the shader.
The shading functions have the following interface:
void
my_shader(world, normal, texture, view_vec, lights, surface, color, opacity)
Vector *world;
Vector *normal;
Vector *texture;
Vector *view_vec;
Lightsource *lights;
void *surface;
Color *color;
Color *opacity;
* `world' is the position in world coordinates of the point that is
rendered.
* `normal' is the surface normal in the point. Note: this vector is
NOT normalized.
* `texture' contains the interpolated values of the texture
coordinates.
* `view_vec' is a vector pointing from the rendered point at the
viewpoint, i.e. the currently active camera.
* `lights' points to the linked list holding all lights.
* `surface' is a pointer to a surface description, i.e. a data area
holding information specific for the rendered surface and the
shader. The implementor of the shader decides what to put in this
area. It is the same pointer that was sent to `surface_create()'
(*Note Creating objects::).
* `color' points to an area where the shader should place the
calculated color of the point.
* `opacity' points to an area where the shader should place the
calculated opacity of the point.
Since shaders are regular C functions they can be "cascaded". If one
do not want to implement a complete illumination calculation but want
to do some special effect, like texture or bumpmapping, the easiest way
is to write a shader that only manipulates the surface color, normal or
whatever, and then calls another shader, like `phong_shader()', to do
the actual shading. This is the way most of the shaders provided in
SIPP work (see *Note Provided shaders::).
If one wants to implement a new shading model, things get slightly
more complicated. Lightsources and possible shadows must be considered.
The heart of such a shader must contain a loop over all lightsources,
which are stored in a linked list. Inside this loop every lightsource is
evaluated to see how much light from it that reaches the shaded point.
Here is an skeleton example of how the code could look:
void
my_shader(world, normal, texture, view_vec, lights, surface, color, opacity)
Vector *world;
Vector *normal;
Vector *texture;
Vector *view_vec;
Lightsource *lights;
void *surface;
Color *color;
Color *opacity;
{
Lightsource *lp; /* Current lightsource */
Vector light_vec; /* Direction to current lightsource */
double light_factor; /* Fraction of light reaching us */
Color light_color; /* Resulting color from lightsource */
/*
* Other declarations and various initializations
* ...
* ...
*/
/*
* Loop over all lightsources
*/
for (lp = lights; lp != NULL; lp = lp->next)
{
/* Find out where the lightsource are and */
/* how much light from it that reaches us. */
light_factor = light_eval(lp, world, &light_vec);
/* Calculate contributed light from the lightsource */
light_color.red = light_factor * lp->color.red;
light_color.grn = light_factor * lp->color.grn;
light_color.blu = light_factor * lp->color.blu;
/*
* Calculate shading contribution from the
* lightsource using whatever model the shader
* implements.
* ...
* ...
*/
}
/*
* Store the final calculated color and opacity
* for the point where SIPP can find it and return.
*/
color->red = ....
color->grn = ....
color->blu = ....
opacity->red = ....
opacity->grn = ....
opacity->blu = ....
}
The function `light_eval()' and its parameters are described in more
detail in the chapter on lightsources (see *Note Manipulating lights::).
File: sipp, Node: Object primitives, Next: Future enhancements, Prev: Shaders, Up: Top
Object primitives
*****************
As mentioned before, SIPP only renders surfaces built up of polygons.
Sometimes this is too low a level for the user to program in, so some
higher level of abstraction is needed. In the SIPP library a number of
functions are provided that generate higher level objects from ordinary
SIPP surfaces. Most of them are simple geometric primitives, but some
are more sophisticated such as Bezier surfaces. If other types of
objects are needed the user has to build them by him/herself (*Note
Creating objects::).
Each object primitive which can be created in SIPP has an argument
that describes what kind of texture coordinates should be assigned to
the surface of the object. This parameter can have one of the following
predefined values:
* `NATURAL'
This value tell SIPP to use a two dimensional mapping which is
"natural" for this particular object. It might be one of the other
available mappings or it might be something unique for the object.
The description of the functions for creating the individual
objects specifies how this mapping is done.
* `CYLINDRICAL'
A two dimensional mapping. The coordinates are assigned as if the
object were projected on a cylinder surrounding the object and
centered on the z-axis object. The coordinates are mapped so that
`x' goes from 0 to 1 around the base of the cylinder and `y' goes
from 0 to 1 from bottom to top on it.
* `SPHERICAL'
Same as `CYLINDRICAL', but the object are projected on a sphere
surrounding it instead.
* `WORLD'
A three dimensional mapping. The texture coordinates are the same
three dimensional coordinates as the world coordinates of the
object at creation time.
The following objects are provided in the standard SIPP distribution.
To use them, you must put the line
#include <primitives.h>
into your `C' source file.
* Menu:
* The cube object:: Creating a cube
* The block object:: Creating a block
* The prism object:: Creating a prism
* The sphere object:: Creating a sphere
* The ellipsoid object::Creating a ellipsoid
* The cylinder object:: Creating a cylinder
* The cone object:: Creating a cone
* The torus object:: Creating a torus
* The Bezier patch:: Creating a Bezier patch from function calls
* The Bezier rotation curve:: Creating a Bezier surface from a rotated
Bezier curve
* The Bezier file:: Creating a Bezier patch from a data file
File: sipp, Node: The cube object, Next: The block object, Up: Object primitives
The cube object
===============
This function creates a cube centered about the origin.
The `NATURAL' texture mapping is similar to `CYLINDRICAL' but the
`x' coordinate is not taken from projection on a cylinder but is evenly
distributed around the perimeter. An odd thing in all the 2D mappings
(all except `WORLD') for the cube is that the top face will have
texture coordinates (0.0, 1.0) while the bottom will get (0.0, 0.0).
Object *
sipp_cube(size, surface, shader, texture)
double size;
void *surface;
Shader *shader;
int texture;
* `size'
Size of the sides on the cube.
* `surface'
Pointer to the surface description to use when shading the cube.
* `shader'
Shader to use when shading the cube.
* `texture'
Choice of texture mapping.
File: sipp, Node: The block object, Next: The prism object, Prev: The cube object, Up: Object primitives
The block object
================
This function creates a rectangular block centered about the origin.
The `NATURAL' texture mapping is similar to `CYLINDRICAL' but the
`x' coordinate is not taken from projection on a cylinder but is evenly
distributed around the perimeter. An odd thing in all the 2D mappings
(all except `WORLD') for the block is that the top face will have
texture coordinates (0.0, 1.0) while the bottom will get (0.0, 0.0).
Object *
sipp_block(xsize, ysize, zsize, surface, shader, texture)
double xsize, ysize, zsize;
void *surface;
Shader *shader;
int texture;
* `xsize, ysize, zsize'
Size of the sides on the block.
* `surface'
Pointer to the surface description to use when shading the block.
* `shader'
Shader to use when shading the block.
* `texture'
Choice of texture mapping.
File: sipp, Node: The prism object, Next: The sphere object, Prev: The block object, Up: Object primitives
The prism object
================
This function creates a prism, i.e. a polygon in the x,y-plane which
is extruded along the z-axis.
The `NATURAL' texture mapping is similar to `CYLINDRICAL' but the
`x' coordinate is not taken from projection on a cylinder but is evenly
distributed around the perimeter. An odd thing in all the 2D mappings
(all except `WORLD') for the prism is that the top face will have
texture coordinates (0.0, 1.0) while the bottom will get (0.0, 0.0).
Object *
sipp_prism(num_points, points, zsize, surface, shader, texture)
int num_points;
Vector points[];
double zsize;
void *surface;
Shader *shader;
int texture;
* `num_points' Number of points defining the prism.
* `points' Array of `num_points' points defining the prism. The
points should be given counterclockwise when looking at the prism
from above (positive Z). Only the `x' and `y' members in the
vectors are significant, the `z' member is ignored.
* `zsize'
Size of the prism along the z-axis.
* `surface'
Pointer to the surface description to use when shading the prism.
* `shader'
Shader to use when shading the prism.
* `texture'
Choice of texture mapping.
File: sipp, Node: The sphere object, Next: The ellipsoid object, Prev: The prism object, Up: Object primitives
The sphere object
=================
This function creates a sphere centered around the origin.
The `NATURAL' texture mapping is `SPHERICAL'.
Object *
sipp_sphere(radius, resol, surface, shader, texture)
double radius;
int resol;
void *surface;
Shader *shader;
int texture;
* `radius'
The radius of the sphere.
* `resol'
The sphere is tesselated into polygons. `resol' tells SIPP how
many polygons there should be around the "equator" of the sphere.
* `surface'
Pointer to the surface description to use when shading the sphere.
* `shader'
Shader to use when shading the sphere.
* `texture'
Choice of texture mapping.
File: sipp, Node: The ellipsoid object, Next: The cylinder object, Prev: The sphere object, Up: Object primitives
The ellipsoid object
====================
This function creates an ellipsoid centered around the origin.
The `NATURAL' texture mapping is `SPHERICAL'.
Object *
sipp_ellipsoid(xradius, yradius, zradius, resol, surface, shader, texture)
double xradius;
double yradius;
double zradius;
int resol;
void *surface;
Shader *shader;
int texture;
* `xradius, yradius, zradius'
The radii of the ellipsoid in the principal axes directions.
* `resol'
The ellipsoid is tesselated into polygons. `resol' tells SIPP how
many polygons to generate around the "equator" of the ellipsoid.
* `surface'
Pointer to the surface description to use when shading the
ellipsoid.
* `shader'
Shader to use when shading the ellipsoid.
* `texture'
Choice of texture mapping.
File: sipp, Node: The cylinder object, Next: The cone object, Prev: The ellipsoid object, Up: Object primitives
The cylinder object
===================
This function creates a cylinder centered around the z-axis and the
origin.
The `NATURAL' texture mapping is `CYLINDRICAL'.
Object *
sipp_cylinder(radius, resol, surface, shader, texture)
double radius;
int resol;
void *surface;
Shader *shader;
int texture;
* `radius'
Radius of the cylinder.
* `resol'
The cylinder is tesselated into polygons, `resol' tells SIPP how
many polygons there should be around it.
* `surface'
Pointer to the surface description to use when shading the
cylinder.
* `shader'
Shader to use when shading the cylinder.
* `texture'
Choice of texture mapping.
File: sipp, Node: The cone object, Next: The torus object, Prev: The cylinder object, Up: Object primitives
The cone object
===============
This function creates a, possibly truncated, cone centered around the
z-axis and the origin.
The `NATURAL' texture mapping is `CYLINDRICAL'.
Object *
sipp_cone(topradius, bottomradius, resol, surface, shader, texture)
double topradius;
double bottomradius;
int resol;
void *surface;
Shader *shader;
int texture;
* `topradius, bottomradius'
Radius of the cone at the top and bottom. If the cone should be
pointed at one of the end, specify 0 as radius.
* `resol'
The cone is tesselated into polygons, `resol' tells SIPP how many
polygons there should be around it.
* `surface'
Pointer to the surface description to use when shading the cone.
* `shader'
Shader to use when shading the cone.
* `texture'
Choice of texture mapping.
File: sipp, Node: The torus object, Next: The Bezier patch, Prev: The cone object, Up: Object primitives
The torus object
================
This function creates a torus centered around the z-axis and the
origin.
The `NATURAL' texture mapping is a two dimensional mapping with the
`x' coordinate going around the "small" circle and the `y' coordinate
going around the "large" circle.
Object *
sipp_torus(bigradius, smallradius, res1, res2, surface, shader, texture)
double bigradius;
double smallradius;
int res1;
int res2;
void *surface;
Shader *shader;
int texture;
* `bigradius, smallradius'
Radius of the big and small circle defining the torus, the small
circle is swept along the big one to sweep out the torus.
* `res1, res2'
The torus will be tesselated into `res1 x res2' polygons. `res1'
is the number of vertices around the big circle and `rad2' is the
number of vertices around the small one.
* `surface'
Pointer to the surface description to use when shading the torus.
* `shader'
Shader to use when shading the torus.
* `texture'
Choice of texture mapping.
File: sipp, Node: The Bezier patch, Next: The Bezier rotation curve, Prev: The torus object, Up: Object primitives
The Bezier patch
================
This function creates one or more Bezier patches. All created
patches in a call will belong to the same surface.
The texture coordinates are a bit special for the Bezier patches.
`CYLINDRICAL' and `SPHERICAL' coordinates are not applicable, if they
are specified, SIPP will use `NATURAL' anyway. The `NATURAL' mapping is
a two dimensional mapping using the surface parameters u and v, see
figure below. Note that these parameters range from 0 to 1 within each
patch!
The patches are defined with a list of vertex coordinates and a set
of 16 indices into that list for each patch. The following figure show
in which order the indices to vertices corresponding to controlpoints
for the patch should be given (and how u and v varies over the patch):
v=1 13____14____15____16
| | | |
| | | |
9____10____11____12
| | | |
| | | |
5_____6_____7_____8
| | | |
| | | |
v=0 1_____2_____3_____4
u=0 u=1
Object *
sipp_bezier_patch(num_vertex, vertex, num_patch, vx_index, resol,
surface, shader, texture)
int num_vertex;
Vector vertex[];
int num_patch;
int vx_index[];
int resol;
void *surface;
Shader *shader;
int texture;
* `num_vertex, vertex'
The array `vertex' contains a list of `num_vertex' vertices.
* `num_patch'
The number of patches that should be defined.
* `vx_index'
A list of `16 * num_patch' indices into `vertex' defining the
control mesh of the patches. The vertices for each patch should be
specified in the order indicated in the figure above.
* `resol'
Each patch will be tesselated into `resol x resol' polygons.
* `surface'
Pointer to the surface description to use when shading the patches.
* `shader'
Shader to use when shading the patches.
* `texture'
Choice of texture mapping (only `NATURAL' and `WORLD' is
applicable.
File: sipp, Node: The Bezier rotation curve, Next: The Bezier file, Prev: The Bezier patch, Up: Object primitives
The Bezier rotation curve
=========================
This function creates a surface by rotating one or more Bezier curves
about the world z-axis.
The texture coordinates are a bit special for these surfaces.
`SPHERICAL' and `CYLINDRICAL' mappings are not applicable, and
`NATURAL' mapping will apply to the piece of surface created by each
Bezier curve separately. The `NATURAL' mapping uses the curve parameter
u along each curve as `x' coordinate and goes from 0 to 1 around the
perimeter of the rotational surface on the other axis
The curves are defined with a list of vertex coordinates and a set
of 4 indices into that list for each curve. The following figure show
in which order the indices to vertices corresponding to controlpoints
for the curve should be given.
4 u=1
z-axis \
^ \
| 3
| |
| |
| 2
| \
| \
| 1 u=0
Object *
sipp_bezier_rotcurve(num_vertex, vertex, num_curve, vx_index, resol,
surface, shader, texture)
int num_vertex;
Vector vertex[];
int num_curve;
int vx_index[];
int resol;
void *surface;
Shader *shader;
int texture;
* `num_vertex, vertex'
The array `vertex' contains a list of `num_vertex' vertices.
* `num_patch'
The number of curves that should be defined.
* `vx_index'
A list of `4 * num_patch' indices into `vertex' defining the
control polygon for the curves. The vertices for each curve should
be specified in the order indicated in the figure above.
* `resol'
Each rotational surface will be tesselated into `resol x 4*resol'
polygons, `resol' vertices along the curve and `4*resol' vertices
around the perimeter.
* `surface'
Pointer to the surface description to use when shading the surface.
* `shader'
Shader to use when shading the surface.
* `texture'
Choice of texture mapping (only `NATURAL' and `WORLD' is
applicable.
File: sipp, Node: The Bezier file, Prev: The Bezier rotation curve, Up: Object primitives
The Bezier file
===============
This functions reads descriptions of Bezier patches or Bezier curves
in a predefined format from a file and creates objects out of them. The
file can contain a description of patches or curves, but not both. If
curves are defined, a surface will be created by rotating them about the
world z-axis. The file contain basically the same information as the
parameters to a call to `sipp_bezier_patch()' or
`sipp_bezier_rotcurve()' and texture mapping is applied in the same way
as in these functions too.
The format of the file is very simple. Please note however, that the
format differs slightly from the way the data were specified in the
previous two functions. This is for compatibility with older versions.
The differences are noted in detail at the spots marked Diff: below.
First in the file is a keyword defining the type of description in
the file, `bezier_curves:' or `bezier_patches:'. Then follows a
description of the vertices (control points). First the word
`vertices:' followed by an integer number that tells how many vertices
there are in the description, then the word `vertex_list:' followed by
the x, y and z coordinates for each vertex. The number of vertices must
be same as the number given above. This is, however, not checked for.
If the file contains curves, the keyword `curves:' followed by the
number of Bezier curves in the file is on the next line. After this
line, a line with the single keyword `curve_list:' follows. Lastly, the
Bezier curves themselves follow as numbers in groups of four by four.
Diff: Each number is an index into the vertex list with the first index
having number 1.
Diff: The indices are given in the opposit order compared to
`sipp_bezier_rotcurve()'.
If the file contains patches, the format is the same with the
following exceptions: The word `patches:' is substituted for `curves:',
the word `patch_list:' is substituted for `curve_list:' and the indices
into the vertex list are grouped 16 by 16 instead of 4 by 4.
Diff: Each number is an index into the vertex list with the first index
having number 1.
Comments can be inserted anywhere in a Bezier curve/patch description
file by using the hashmark character, `#'. The comment lasts to the end
of the line.
As an example of a Bezier file is here the body of a standard Newell
teapot:
# Bezier curves (rotational body) for teapot body.
bezier_curves:
vertices: 10
vertex_list:
3.500000E-01 0.000000E+00 5.625000E-01
3.343750E-01 0.000000E+00 5.953125E-01
3.593750E-01 0.000000E+00 5.953125E-01
3.750000E-01 0.000000E+00 5.625000E-01
4.375000E-01 0.000000E+00 4.312500E-01
5.000000E-01 0.000000E+00 3.000000E-01
5.000000E-01 0.000000E+00 1.875000E-01
5.000000E-01 0.000000E+00 7.500000E-02
3.750000E-01 0.000000E+00 1.875000E-02
3.750000E-01 0.000000E+00 0.000000E+00
curves: 3
curve_list:
1 2 3 4
4 5 6 7
7 8 9 10
#End of teapot bezier file
Object *
sipp_bezier_file(file, resol, surface, shader, texture)
FILE *file;
int resol;
void *surface;
Shader *shader;
int texture;
* `file'
An open filepointer to the file containing the descriptions.
* `resol'
Each rotational surface will be tesselated into `resol x 4*resol'
polygons, `resol' vertices along the curve and `4*resol' vertices
around the perimeter.
Patches will be tesselated into `resol x resol' polygons.
* `surface'
Pointer to the surface description to use when shading the
surfaces.
* `shader'
Shader to use when shading the surfaces.
* `texture'
Choice of texture mapping (only `NATURAL' and `WORLD' is
applicable.
File: sipp, Node: Future enhancements, Next: Reporting bugs, Prev: Object primitives, Up: Top
Future enhancements
*******************
SIPP is constantly under development and we often run into new
interesting things that we would like to see included. Here is a small
list of such things, some more realistic than others. If you feel like
adding to this list, please do! Check out the chapter on bugreports
(*Note Reporting bugs::) for information on how to get in touch with us.
* More sophisticated anti-aliasing. This should not be so difficult
with the new pixel buffer.
* User specified normals at vertices.
* Generalized interface to lightsources, much in the same way as the
shader interface. This would allow users to design "lightsource
shaders"
* Better support for animation.
* Support for some more advanced object primitives, especially
patches (Hermite, NURBS, etc.)
* Four channel output. Write out an alpha channel together with RGB.
This is troublesome if we want to stick with the ppm-format which
does not support this. Possible solutions include switching to
Utah Raster format or writing the alpha channel in a separate
pgm-file.
* Curved surface rendering (this would mean a name change I guess...
:-) )
* Use some sort of "virtual memory" by swapping things to disk. This
would make it possible to run SIPP on machines with braindamaged
OS and/or hardware which doesn't support real VM.
* Front-end for reading RIB-files (Renderman Interface Bytestream).
This might not be as impossible as it may sound.
* Store objects in a "higher order" format, and tesselate to
polygons at rendering time. This could allow generalizing the
object interface too so users could supply their own objects, with
tesselation functions. (Yes, I have been reading the Renderman
specs...)
Contributions
=============
We are grateful for all donations of code that we can receive. We are
especially looking for new primitive objects and interesting shaders.
File: sipp, Node: Reporting bugs, Next: Concept index, Prev: Future enhancements, Up: Top
Reporting bugs
**************
We have tried to test SIPP thoroughly, but since it is constantly
being developed, there are probably numerous bugs remaining, both in the
source code and in the documentation. If you find a bug in either,
please send a bug report to either `jonas-y@isy.liu.se' or
`ingwa@isy.liu.se'. We will try to be as quick as possible in fixing
the bugs and redistributing the fixes.
/Jonas Yngvesson & Inge Wallin
File: sipp, Node: Concept index, Next: Function index, Prev: Reporting bugs, Up: Top
Concept index
*************
* Menu:
* Sipp_bitmap: Sipp_bitmap.
* Sipp_pixmap: Sipp_pixmap.
* Archives: Archives.
* Authors: Authors.
* Basic concepts: Basic concepts.
* basic shader: The basic shader.
* Bezier file: The Bezier file.
* Bezier patch: The Bezier patch.
* Bezier rotation curve: The Bezier rotation curve.
* block object: The block object.
* bozo shader: The bozo shader.
* Bugs, reporting: Reporting bugs.
* Building objects: Building objects.
* bumpy shader: The bumpy shader.
* Cameras and viewpoint: Viewpoint and cameras.
* cone object: The cone object.
* Copying license: License information.
* Creating lightsources: Creating lights.
* Creating objects: Creating objects.
* Creating polygons and surfaces: Creating polygons and surfaces.
* cube object: The cube object.
* cylinder object: The cylinder object.
* Datatypes: Datatypes.
* Distribution: License information.
* Duplicating objects: Duplicating objects.
* ellipsoid object: The ellipsoid object.
* Enhancements: Future enhancements.
* General Public License: License information.
* Geometric operations: Geometric operations.
* Getting started: Getting started.
* granite shader: The granite shader.
* Hierarchies of objects: Building objects.
* Initializations: Initializations.
* Installation: Installation.
* Introduction: Top.
* Library installation: Library installation.
* license to copy SIPP: License information.
* Lights: Lights.
* Lightsources: Lights.
* Lightsources, creating: Creating lights.
* Lightsources, manipulating: Manipulating lights.
* Manipulating lightsources: Manipulating lights.
* Manual installation (on-line): Info manual installation.
* Manual installation (typeset): Typeset manual installation.
* marble shader: The marble shader.
* mask shader: The mask shader.
* Matrix operations: Matrix operations.
* Object primitives: Object primitives.
* Object transformations: Object transformations.
* object, Bezier patch: The Bezier patch.
* object, Bezier rotation curve: The Bezier rotation curve.
* object, block: The block object.
* object, cone: The cone object.
* object, cube: The cube object.
* object, cylinder: The cylinder object.
* object, ellipsoid: The ellipsoid object.
* object, prism: The prism object.
* object, sphere: The sphere object.
* object, torus: The torus object.
* Objects: Objects.
* Objects hierarchies: Building objects.
* Objects, building: Building objects.
* Objects, creating: Creating objects.
* Objects, duplicating: Duplicating objects.
* Phong shader: The Phong shader.
* planet shader: The planet shader.
* Polygons: Polygons.
* Polygons, creating: Creating polygons and surfaces.
* primitive object: Object primitives.
* prism object: The prism object.
* Provided shaders: Provided shaders.
* Rendering: Rendering.
* Rendering to file: Rendering to file.
* Rendering to in-core images: Rendering to in-core images.
* Rendering to other devices: Rendering to other devices.
* Reporting bugs: Reporting bugs.
* shader, basic: The basic shader.
* shader, bozo: The bozo shader.
* shader, bumpy: The bumpy shader.
* shader, granite: The granite shader.
* shader, marble: The marble shader.
* shader, mask: The mask shader.
* shader, Phong: The Phong shader.
* shader, planet: The planet shader.
* shader, Strauss: The Strauss shader.
* shader, wood: The wood shader.
* Shaders: Shaders.
* Shaders, provided: Provided shaders.
* shaders, writing your own: Writing your own shaders.
* Shading functions: Shading functions.
* Shadows: Shadows.
* SIPP, what is it?: What is SIPP?.
* sites: Archives.
* sphere object: The sphere object.
* Strauss shader: The Strauss shader.
* Surface descriptions: Surface descriptions.
* Surfaces: Surfaces.
* Surfaces, creating: Creating polygons and surfaces.
* Texture coordinates: Texture coordinates.
* texture mapping, types of: Object primitives.
* torus object: The torus object.
* Transformations: Transformations.
* Transformations, applying: Object transformations.
* Vector operations: Vector operations.
* Viewpoint and cameras: Viewpoint and cameras.
* Virtual cameras: Viewpoint and cameras.
* What is SIPP?: What is SIPP?.
* wood shader: The wood shader.
* writing shaders: Writing your own shaders.
File: sipp, Node: Function index, Prev: Concept index, Up: Top
Function index
**************
* Menu:
* basic_shader(): The basic shader.
* bozo shader: The bozo shader.
* bumpy_shader(): The bumpy shader.
* camera_create(): Viewpoint and cameras.
* camera_destruct(): Viewpoint and cameras.
* camera_focal(): Viewpoint and cameras.
* camera_look_at(): Viewpoint and cameras.
* camera_params(): Viewpoint and cameras.
* camera_position(): Viewpoint and cameras.
* camera_up(): Viewpoint and cameras.
* camera_use(): Viewpoint and cameras.
* granite_shader(): The granite shader.
* light_active(): Manipulating lights.
* light_color(): Manipulating lights.
* light_destruct(): Creating lights.
* light_eval(): Manipulating lights.
* lightsource_create(): Creating lights.
* lightsource_put(): Manipulating lights.
* MakeVector(): Vector operations.
* marble_shader(): The marble shader.
* mask_shader(): The mask shader.
* mat_mirror_plane(): Matrix operations.
* mat_mul(): Matrix operations.
* mat_rotate(): Matrix operations.
* mat_rotate_x(): Matrix operations.
* mat_rotate_y(): Matrix operations.
* mat_rotate_z(): Matrix operations.
* mat_scale(): Matrix operations.
* mat_translate(): Matrix operations.
* MatCopy(): Matrix operations.
* object_add_subobj(): Building objects.
* object_add_surface(): Building objects.
* object_clear_transf(): Object transformations.
* object_create(): Building objects.
* object_deep_dup(): Duplicating objects.
* object_delete(): Building objects.
* object_dup(): Duplicating objects.
* object_get_transf(): Object transformations.
* object_instance(): Duplicating objects.
* object_move(): Object transformations.
* object_rot(): Object transformations.
* object_rot_x(): Object transformations.
* object_rot_y(): Object transformations.
* object_rot_z(): Object transformations.
* object_scale(): Object transformations.
* object_set_transf(): Object transformations.
* object_sub_subobj(): Building objects.
* object_sub_surface(): Building objects.
* object_transform(): Object transformations.
* phong_shader(): The Phong shader.
* planet_shader(): The planet shader.
* point_transform(): Matrix operations.
* polygon_push(): Creating polygons and surfaces.
* render_field_file(): Rendering to file.
* render_field_func(): Rendering to other devices.
* render_image_file(): Rendering to file.
* render_image_func(): Rendering to other devices.
* sipp_background(): Initializations.
* sipp_bezier_file(): The Bezier file.
* sipp_bezier_patch(): The Bezier patch.
* sipp_bezier_rotcurve(): The Bezier rotation curve.
* sipp_bitmap_create(): Sipp_bitmap.
* sipp_bitmap_destruct(): Sipp_bitmap.
* sipp_bitmap_line(): Sipp_bitmap.
* sipp_bitmap_write(): Sipp_bitmap.
* sipp_block(): The block object.
* sipp_block(): The block object.
* sipp_cone(): The cone object.
* sipp_cube(): The cube object.
* sipp_cube(): The cube object.
* sipp_cylinder(): The cylinder object.
* sipp_ellipsoid(): The ellipsoid object.
* sipp_init(): Initializations.
* sipp_pixmap_create(): Sipp_pixmap.
* sipp_pixmap_destruct(): Sipp_pixmap.
* sipp_pixmap_set_pixel(): Sipp_pixmap.
* sipp_pixmap_write(): Sipp_pixmap.
* sipp_prism(): The prism object.
* sipp_prism(0: The prism object.
* sipp_shadows(): Initializations.
* sipp_show_backfaces(): Initializations.
* sipp_sphere(): The sphere object.
* sipp_sphere(): The sphere object.
* sipp_torus(): The torus object.
* spotlight_at(): Manipulating lights.
* spotlight_create(): Creating lights.
* spotlight_opening(): Manipulating lights.
* spotlight_pos(): Manipulating lights.
* spotlight_shadows(): Manipulating lights.
* strauss_shader(): The Strauss shader.
* surface_basic_create(): Creating polygons and surfaces.
* surface_basic_shader(): Creating polygons and surfaces.
* surface_create(): Creating polygons and surfaces.
* surface_set_shader(): Creating polygons and surfaces.
* transf_mat_create(): Matrix operations.
* Transf_mat_destruct(): Matrix operations.
* VecAdd(): Vector operations.
* VecAddS(): Vector operations.
* VecComb(): Vector operations.
* VecCopy(): Vector operations.
* VecCross(): Vector operations.
* VecDot(): Vector operations.
* VecLen(): Vector operations.
* VecNegate(): Vector operations.
* vecnorm(): Vector operations.
* VecScalMul(): Vector operations.
* VecSub(): Vector operations.
* vertex_push(): Creating polygons and surfaces.
* vertex_tx_push(): Creating polygons and surfaces.
* wood_shader(): The wood shader.